OpenGL - Les formes

Les formes

Cette librairie, qui est disponible dans la section télécharger, sert avant tout à dessiner ce que l'on veut. A la base nous avons des vertex. Ce sont les points que nous plaçons dans l'espace, on peut également les positionner dans 2 dimensions mais vous verrez ça vous même.
Il suffit de les encapsuler par leur methode de lien pour dessiner quelque chose.
Exemple, voilà comment on dessine un carré :

glBegin(GL_QUADS); //début de l'objet, (méthode);
glVertex3d(0,0,0); //->
glVertex3d(1,0,0); //position des points dans l'espace,
glVertex3d(1,1,0); //suivants les axes x, y, z;
glVertex3d(0,1,0); //<-
glEnd(); //fin de l'objet;

Tous les objets que vous crérez suiveront ce principe. Il faut savoir aussi que la plupart des fonctions opengl ne peuvent pas être utilisées entre glBegin() et glEnd (il n'y a quasiment que glColor() qui fonctionne, mais on en reparlera plus tard).
Enfin il suffit de bien choisir la méthode de lien des vertex et on peut faire n'importe quoi. Voilà la liste des méthodes existantes :

Méthodes_de_lien Descriptions schémas
GL_POINTS Dessine un point pour chaque vertex transmis. points
GL_LINES Dessine des lignes. Le point n défini le début d'une ligne et le point n+1 la fin de la ligne. lines
GL_LINE_STRIP Dessine un groupe de lignes connectées, formant une chaine partant du premier vertex et s'arrêtant au deriner. line strip
GL_LINE_LOOP Même chose que GL_LINE_STRIP, mais en revenant au premier vertex à la fin. line loop
GL_TRIANGLES Chaque triplet de vertex constitue un triangle triangle
GL_TRIANGLE_STRIP Un triangle est défini pour chaque vertex présenté après les deux premiers triangle strip
GL_TRIANGLE_FAN Même chose que GL_TRIANGLE_STRIP, sauf que le premier vertex de chaque triangle est toujours le n°1 triangle fan
GL_QUADS Chaque quadruplet de vertex définit un quadrilatère (composé de 2 triangles) quads
GL_QUAD_STRIP Chaque couple de vertex présenté après la première paire définit un quadrilatère (attention à l'ordre des points) quad strip
GL_POLYGON Dessine un polygone convexe polygon

En générale, on utilise des carrés pour faire des objets complèxes. Dans certains cas on utilise des triangles pour obtenir une forme bien particulière. Mais c'est un peu compliqué pour le moment vous verrez ça dans la section cours/algorithmique/deformation d'un plan.

Les formes avec glu

glu est le complément d'opengl, indispensable, il permet entre autre de créer des objets quadratiques(sphere, cylindre, disque plein ou partiel).
Il est capable également de créer des objets très complèxes grâce aux techniques nurbs et tesselation, mais étant un peu trop compliquées pour le moment, gardons notre attention sur les objets quadratiques.

Pour créer un tel objet, il faut suivre la procedure suivante:

/*--------- Global ---------------*/ //A declarer en global ou tout mettre dans la meme fonction
GLUquadricObj *pObj; //definition du pointeur d'objet
/*--------- INIT ---------------*/ //En phase d'initialisation
pObj = gluNewQuadric(); //creation d'un objet(Retourne 0 si No Memory)
gluQuadricNormals(pObj, GLU_SMOOTH); //application des normals
/*--------- DrawScene ----------*/ //Dans la fonction d'affichage
gluSphere (pObj, 10, 1024, 1024); //par exemple
/*---------- FIN --------------*/ //et a la fin du programme
gluDeleteQuadric (pObj); //detruit l'objet
instructions_glu Descriptions schémas
gluCylinder(pObj, baseRadius, topRadius, height, slices, stacks);//dessine un cylindrecylinder
gluDisk (pObj, innerRadius, outerRadius, slices, loops);//dessine un diskdisk
gluPartialDisk (pObj, innerRadius, outerRadius, slices, loops, startAngle, sweepAngle);//dessine un disque partielpartialdisk
gluSphere (pObj, radius, slices, stacks);//dessine une spheresphere

Les formes avec glut

Glut est là pour nous simplifier la vie, elle nous crée très facilement l'environnement qu'a besoin opengl(je parle de la fenêtre graphique). Mais elle a quelques fonctions bien sympathiques, comme des objets 3D déjà tout fait, qui nous simplifie énormement la vie. Avec une ligne de code on peut faire direct un cube, une sphère, un cône etc.. Et bien sur tout ça rèste 100% portable.

instructions_glut Descriptions schémas
glutWireSphere(double radius, int slices, int stacks); glutSolidSphere(double radius, int slices, int stacks); Dessine une sphère, en filaire(Wire) ou en plein(Solid). sphere
glutSolidCone(double base, double height, int slices, int stacks); Dessine un cône. cone
glutSolidCube(GLdouble size); Dessine un un cube. cube
glutSolidTorus(dble innerRadius, dble outerRadius, int sides, int rings); Dessine un beignet, hum g faim. torus
glutSolidDodecahedron(void); Dessine un truc chelou, il n'a pas d'arguments ca taille est de 1. Dodecahedron
glutSolidTeapot(GLdouble size); A la c'est une tasse de cafe. Etrange? teapot
glutSolidOctahedron(void); Dessine un losange 3D. Octahedron
glutSolidTetrahedron(void); Dessine une pyramide à base triangulaire. Tetrahedron
glutSolidIcosahedron(void); Et ça c'est une 'boule' à fassette triangulaire. Icosahedron

Chacune de ces formes à deux fonctions, comme pour la sphère, il suffit de remplacer "Solid" par "Wire" dans le nom de la fonction utilisée et on se retrouve avec un objet filaire à la place d'un normal. Les objets ainsi créés apparaissent au centre de la matrice active. C'est pratique toutes ces petites fonctions, mais c'est super limitées. On les utilise quand il faut mettre des petites boules un peu partout, mais c'est pas avec ça qu'on va faire un personnage à la quake-like.

Retour
contact: ultrafil [AT] fr.st